class Age:
    def __get__(self, instance, owner):
        print(self)
        print(instance)
        print(owner)
        print('====')
        print('__get__')
    def __set__(self, instance, value):
        print(value)
        print('__set__')
    def __delete__(self, instance):
        print('__delete__')

class Person:
    age = Age()
    def __init__(self, age) -> None:
        self._age = age

p = Person(11)
p.age = 10
print(p.age)
del p.age

print('=========')
class Person2:
    age = Age()
    def __init__(self, age) -> None:
        self._age = age

    def __getattribute__(self, __name: str):
        pass

p2 = Person2(11)
p2.age = 10
print(p2.age)
del p2.age

# #  属性描述器失效的两个原因：
# 1. 两个类必须都是新式类，即均继承自_Object
# 1. 可能会被其他方法拦截。
# 获取实例属性，是有__getattribute__实现的， 这个方法首先看 这个属性有没有实现 __get__ 方法，如果没有，则按照一下顺序执行：
# 1. 实例对象自身的 __dict__
# 1. 类对象的 __dict__
# 1. 父类 __dict__
# 1. 实例自身的 __getattr__ 
